package com.example.yin.model.domain;

import lombok.Data;

import java.io.Serializable;

/**
 *
 * @TableName banner
 * 这是一个表示轮播图/横幅广告的简单领域模型类，实现了Java的序列化接口。
 * 使对象可序列化，支持：
 * 网络传输
 * 持久化存储
 * serialVersionUID用于版本控制，确保序列化兼容性
 */
@Data
public class Banner implements Serializable {
    //轮播图
    // Java中的序列化机制 Serialization 接口，用于序列化对象，保证对象的可序列化性。
    /**
     *
     */
    private Integer id; // 主键ID 轮播图的唯一标识

    /**
     *
     */
    private String pic; // 图片路径/URL

    //serialVersionUID：版本控制字段，用于验证序列化兼容性
    private static final long serialVersionUID = 1L;

    ///比较是否相等url和id
    @Override
    public boolean equals(Object that) {
        // 1. 自反性检查  对象和自身比较，同返回true
        if (this == that) {
            return true;
        }
        // 2. 非空检查    空不行
        if (that == null) {
            return false;
        }
        // 3. 类型检查     要求两个对象必须是同一个类的实例，而不能是子类
        if (getClass() != that.getClass()) {
            return false;
        }
        // 4. 字段值比较 比较了`id`和`pic`字段
        //使用三元运算符处理null的情况。需要确认比较安全，特别是当字段可能为null时。
        // 当`this.getId()`为null时，检查`other.getId()`是否也为null，否则返回false，这符合空值处理的正确方式。
        Banner other = (Banner) that;
        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
            && (this.getPic() == null ? other.getPic() == null : this.getPic().equals(other.getPic()));
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
        result = prime * result + ((getPic() == null) ? 0 : getPic().hashCode());
        return result;
    }

    /// Banner [Hash=12345, id=1, pic=banner1.jpg, serialVersionUID=1]
    /// 类名、哈希值、所有字段和序列化版本
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", pic=").append(pic);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}
/**
 * 数据库映射
 对应banner表中的记录
 通常与MyBatis/MyBatis-Plus配合使用*/
